﻿#region Using

using SAPbouiCOM;
using SapFramework.Interface.Controls.Items.Base;
using SapFramework.Interface.Events;

using Form = SapFramework.Interface.Controls.Forms.Base.Form;
using Item = SapFramework.Interface.Controls.Items.Base.Item;

#endregion

namespace SapFramework.Interface.Controls.Items.Specific
{
    /// <summary>
    /// Realiza o encapsulamento de um objeto do tipo <see cref="SAPbouiCOM.Button"/> da UI API do SAP Business One
    /// </summary>
    public sealed class Button : Item,  SAPbouiCOM.Button
    {
        #region Eventos

        /// <summary>
        /// Evento disparado quando o botão principal do mouse foi clicado duas vezes sobre um item, mas nenhuma ação foi tomada ainda.
        /// </summary>
        [Event( BoEventTypes.et_DOUBLE_CLICK )]
        public event EventBoolItem OnBeforeDoubleClick;

        /// <summary>
        /// Evento disparado quando o botão principal do mouse foi clicado duas vezes sobre um item, e qualquer ação do SBO já foi realizada.
        /// </summary>
        [Event( BoEventTypes.et_DOUBLE_CLICK )]
        public event EventVoidItem OnAfterDoubleClick;

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, mas nenhuma ação foi tomada ainda.
        /// </summary>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventBoolItem OnBeforeItemPressed;

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, e qualquer ação do SBO já foi realizada.
        /// </summary>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventVoidItem OnAfterItemPressed;

        /// <summary>
        /// Ocorre quando uma tecla for pressionado sobre a ComboBox, porém nenhuma ação foi tomada ainda.
        /// </summary>
        [Event( BoEventTypes.et_KEY_DOWN )]
        public event EventBoolItem OnBeforeKeyDown;

        /// <summary>
        /// Ocorre quando uma tecla for pressionado sobre a ComboBox, e qualquer ação do SBO já foi executada.
        /// </summary>
        [Event( BoEventTypes.et_KEY_DOWN )]
        public event EventVoidItem OnAfterKeyDown;

        /// <summary>
        /// Evento que ocorre quando um botão de ChooseFromList foi clicado, mas ela ainda não foi invocada.
        /// </summary>
        [Event( BoEventTypes.et_CHOOSE_FROM_LIST )]
        public event EventBoolItem OnBeforeChooseFromList;

        /// <summary>
        /// Evento que ocorre quando um botão de ChooseFromList foi clicado, e ela já está a mostra.
        /// </summary>
        [Event( BoEventTypes.et_CHOOSE_FROM_LIST )]
        public event EventVoidChooseFromList OnAfterChooseFromList;

        /// <summary>
        /// Ocorre quando um item na ComboBox foi selecionado, porém nenhuma ação foi tomada ainda.
        /// </summary>
        [Event( BoEventTypes.et_COMBO_SELECT )]
        public event EventBoolChooseFromList OnBeforeComboSelect;

        /// <summary>
        /// Ocorre quando um item na ComboBox foi selecionado, e qualquer ação do SBO já foi executada.
        /// </summary>
        [Event( BoEventTypes.et_COMBO_SELECT )]
        public event EventVoidItem OnAfterComboSelect;

        /// <summary>
        /// Disparado antes da exibição do menu que ocorre quando um clique com o botão direito do mouse é feito sobre um item.
        /// </summary>
        [Event( BoEventTypes.et_RIGHT_CLICK )]
        public event EventBoolContextMenu OnBeforeRightClick;

        /// <summary>
        /// Disparado após a exibição do menu que ocorre quando um clique com o botão direito do mouse é feito sobre um item.
        /// </summary>
        [Event( BoEventTypes.et_RIGHT_CLICK )]
        public event EventVoidContextMenu OnAfterRightClick;

        #endregion

        /// <summary>
        /// Guarda uma referencia para a parte específica do item
        /// </summary>
        private readonly  SAPbouiCOM.Button mButton;

        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="aForm">O formulário ao qual o item pertence</param>
        /// <param name="aItemUniqueId">Id único do Item do Form do SAP Business One</param>
        public Button( Form aForm, string aItemUniqueId ) : base( aForm, aItemUniqueId, BoFormItemTypes.it_BUTTON )
        {
            mButton = mItem.Specific as  SAPbouiCOM.Button;
        }

        #region Implementation of IButton

        /// <summary>
        /// Texto do botão.
        /// </summary>
        public string Caption
        {
            get { return mButton.Caption; }
            set { mButton.Caption = value; }
        }

        /// <summary>
        /// Informa o tipo do botão.
        /// </summary>
        /// <see cref="BoButtonTypes"/>
        public BoButtonTypes Type
        {
            get { return mButton.Type; }
            set { mButton.Type = value; }
        }

        /// <summary>
        /// O caminho para a imagem que deseja exibir no botão.
        /// </summary>
        public string Image
        {
            get { return mButton.Image; }
            set { mButton.Image = value; }
        }

        /// <summary>
        /// Recebe ou informa o Id único da ChooseFromList está/será associada a este item.
        /// </summary>
        public string ChooseFromListUID
        {
            get { return mButton.ChooseFromListUID; }
            set { mButton.ChooseFromListUID = value; }
        }

        #endregion
    }
}